В Ruby наследование — это не просто обмен методами; речь идёт о эволюции состояния. Когда мы создаём подкласс, например, KaraokeSong < Song, устанавливая связь «является-частью»: дочерний класс наследует структуру родителя, одновременно уточняя свою идентичность.
1. Цепочка инициализации
Ключевое слово super является мостом между поколениями. Внутри initialize, вызов super передаёт аргументы в конструктор родительского класса, обеспечивая инициализацию базовых переменных экземпляра (@name, @artist), которые задаются до того, как подкласс добавит своё специфическое состояние (@lyrics).
2. Дополнение методов
Переопределение метода, такого как to_s , позволяет расширить поведение. Вызов super в новой реализации, мы получаем строковый результат родительского метода и просто добавляем новые данные подкласса, сохраняя чистую эволюционную линию.